<html>
<head>
<link rel='stylesheet' href='../../js/sh/SyntaxHighlighter.css' type='text/css' />
<script src='../../js/sh/shCore.js'></script>
<script src='../../js/sh/shBrushJava.js'></script>
<style>
* {
font-family:Courier New,monospace;
  padding: 0;
  margin: 0;
  white-space: nowrap;
  font-size: 11px;
}
.dp-highlighter {
  white-space: nowrap;
  overflow: visible;
  width: 600px;
  font-size: 11px;
  font-family:Courier New,monospace;
}
</style>
</head>
<body>
<textarea name='code' class='java:nogutter' rows='15' cols='120'>
package com.smartgwt.sample.showcase.client.data;

import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.fields.*;
import com.smartgwt.client.widgets.form.validator.FloatPrecisionValidator;
import com.smartgwt.client.widgets.form.validator.FloatRangeValidator;
import com.smartgwt.client.widgets.form.validator.Validator;
import com.google.gwt.core.client.GWT;

public class ItemSupplyXmlDS extends DataSource {

    private static ItemSupplyXmlDS instance = null;

    public static ItemSupplyXmlDS getInstance() {
        if (instance == null) {
            instance = new ItemSupplyXmlDS("supplyItemDS");
        }
        return instance;
    }

    public ItemSupplyXmlDS(String id) {

        setID(id);
        setRecordXPath("/List/supplyItem");
        DataSourceIntegerField pkField = new DataSourceIntegerField("itemID");
        pkField.setHidden(true);
        pkField.setPrimaryKey(true);

        DataSourceTextField itemNameField = new DataSourceTextField("itemName", "Item Name", 128, true);
        DataSourceTextField skuField = new DataSourceTextField("SKU", "SKU", 10, true);

        DataSourceTextField descriptionField = new DataSourceTextField("description", "Description", 2000);
        DataSourceTextField categoryField = new DataSourceTextField("category", "Category", 128, true);
        categoryField.setForeignKey("supplyCategoryDS.categoryName");

        DataSourceEnumField unitsField = new DataSourceEnumField("units", "Units", 5);
        unitsField.setValueMap("Roll", "Ea", "Pkt", "Set", "Tube", "Pad", "Ream", "Tin", "Bag", "Ctn", "Box");

        DataSourceFloatField unitCostField = new DataSourceFloatField("unitCost", "Unit Cost", 5);
        FloatRangeValidator rangeValidator = new FloatRangeValidator();
        rangeValidator.setMin(0);
        rangeValidator.setErrorMessage("Please enter a valid (positive) cost");

        FloatPrecisionValidator precisionValidator = new FloatPrecisionValidator();
        precisionValidator.setPrecision(2);
        precisionValidator.setErrorMessage("The maximum allowed precision is 2");

        unitCostField.setValidators(rangeValidator, precisionValidator);

        DataSourceBooleanField inStockField = new DataSourceBooleanField("inStock", "In Stock");

        DataSourceDateField nextShipmentField = new DataSourceDateField("nextShipment", "Next Shipment");

        setFields(pkField, itemNameField, skuField, descriptionField, categoryField, unitsField,
                  unitCostField, inStockField, nextShipmentField);

        setDataURL("ds/test_data/supplyItem.data.xml");
        setClientOnly(true);        
    }
}
</textarea>
<script class='javascript'>
dp.SyntaxHighlighter.HighlightAll("code");
</script>
</body>
</html>
